import { getGlobalObject } from '../utils/GlobalThis';
import common from '@ohos.app.ability.common';
import Logger from '../utils/Logger';
import fs, { ListFileOptions } from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';
import fileUri from "@ohos.file.fileuri";


const TAG = 'ImageFileService';

const listFileOption: ListFileOptions = {
  recursion: false,
  listNum: 0,
  filter: {
    suffix: [".png", ".jpg", ".jpeg"]
  }
};

/**
 * 如何实现分布式：
 * 1.同局域网同分布式账号认证（不登录分布式账号不会获取到远端文件列表）
 * 2.将文件放入分布式文件夹
 * 3.设置文件权限为s0,默认为s3,rk为低安全等级设备，只能读取s0权限的设备的分布式文件
 * 4.直接获取分布式路径下的图片用于展示*
 *
 *
 * 本模块实现功能
 * 1.获取分布式路径下图片uri,给page页面展示
 * 2.删除图片
 *
 */

export default class ImageFileService {
  private distributedFilepath: string = '';
  private context: common.UIAbilityContext = undefined;

  constructor() {
    this.context = getGlobalObject("context") as common.UIAbilityContext;
    this.distributedFilepath = this.context.distributedFilesDir;
  }

  /**
   * 删除文件
   * @param fileName
   * @returns
   */
  async deletePicture(fileUri: string): Promise<void> {
    let fileName = fileUri.split('/').pop();
    let distributedFilePath = `${this.distributedFilepath}/${fileName}`;
    let distributedFiles = await fs.listFile(this.distributedFilepath, listFileOption);

    if (distributedFiles.some(item => fileName === item)) {
      Logger.info(TAG, `开始删除 ${distributedFilePath}`);
      fs.unlink(distributedFilePath).then(() => {
        Logger.info(TAG, "remove file succeed");
      }).catch((err: BusinessError) => {
        Logger.error(TAG, "remove file failed with error message: " + err.message + ", error code: " + err.code);
      });
    }
  }

  /**
   * 获取图片路径
   * @returns
   */
  getImageList(): string[] {
    // 获取分布式文件夹下的文件
    let files = fs.listFileSync(this.distributedFilepath, listFileOption);
    // 将文件名转换为全路径的uri
    files = files.map((item) => fileUri.getUriFromPath(`${this.distributedFilepath}/${item}`));
    // 排序返回，防止展示顺序不一致
    return files.sort();
  }
}
